package com.ppch.wuwamanus.service;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ppch.wuwamanus.model.dto.chat_history.ChatHistoryQueryRequest;
import com.ppch.wuwamanus.model.entity.ChatHistory;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ppch.wuwamanus.model.entity.User;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

/**
* @author 鲸落
* @description 针对表【chat_history(对话历史)】的数据库操作Service
* @createDate 2025-08-18 15:52:58
*/
public interface ChatHistoryService extends IService<ChatHistory> {


    /**
     * 增加对话历史记录
     * @param chatId 对话ID
     * @param message 对话内容
     * @param messageType 对话类型 user/ai
     * @param userId 对话用户ID
     * @return 是否成功
     */
    boolean addChatHistory(Long chatId, String message, String messageType, Long userId);

    /**
     * 根据对话ID删除对话历史记录
     * @param chatId 对话ID
     * @return 是否成功
     */
    boolean deleteChatHistoryByChatId(Long chatId);

    /**
     * 分页查询对话历史记录
     * @param chatId 对话ID
     * @param pageSize 每页大小
     * @param lastCreateTime 最后创建时间
     * @param loginUser 登录用户
     * @return 对话历史记录分页结果
     */
    Page<ChatHistory> listChatHistoryByPage(Long chatId, int pageSize, LocalDateTime lastCreateTime, User loginUser);

    /**
     * 获取查询包装类
     * @param chatHistoryQueryRequest 对话历史查询请求
     * @return LambdaQueryWrapper
     */
    LambdaQueryWrapper getQueryWrapper(ChatHistoryQueryRequest chatHistoryQueryRequest);

    /**
     * 根据用户 ID 获取用户所有对话历史，并按对话 ID 分组返回每组最早的消息，消息按照创建时间降序排序（8.29 -> 8.27 -> 8.11）
     * @param userId 用户 ID
     * @return 按对话ID分组的 earliest 消息映射表
     */
    Map<Long, List<ChatHistory>> getEarliestMessageByConversation(Long userId);
}
